#!/bin/bash
echo '---------------------bash变量----------';
:<<EOF
shell变量
    定义变量:定义变量不需要用'$'符号
    使用变量:只需要在变量明前加上美元符'$'即可
变量类型
    局部变量:仅在当前shell实例中有效,其他shell启动程序不能访问该局部变量
    环境变量:所有程序,包括shell启动程序
    shell变量:shell变量是由shell程序设置的特殊变量.包含环境变量和局部变量

EOF

name='声明变量，并赋值'
#删除变量
#unset name;
#输出变量
echo "输出变量值为：${name}"


unset name;

echo '---------------------bash字符串----------';

:<<EOF
单引号、双引号、或者不要引号
    单引号里的字符串都会原样输出，单引号字符串中的变量是无效的
    单引号字符串中不能出现单独一个单引号（对单引号使用转义也不行），单程对出现，作为字符串拼接使用
双引号的优点：
    双引号里可以有变量
    双引号里可以出现转义字符
shell传递参数
    注意，$10 不能获取第十个参数，获取第十个参数需要${10}。当n>=10时，需要使用${n}来获取参数。
EOF


string="123456789"

#计算字符串的长度
echo "字符串的长度为：${#string}"

#截取字符串
echo "截取的字符串为：${string:1:4}"

#查找字符串6的位置，脚本命令用户反引号``,而不是单引号
echo `expr index "$string" 69`

echo "shell传递参数示例"
echo "执行的文件名：$0"
echo "第一个参数：$1"
echo "第二个参数：$2"


echo '---------------------bash数组----------'
arr=(1 2 3 4 5 6)
#读取数组元素
echo ${arr[0]}
#打印整个数组用下标用*或@匹配所有元素
echo ${arr[*]}
echo ${arr[@]}
#删除数组
unset arr["0"]
echo ${arr[@]}
#arr数组分片
echo ${arr[@]:0:3}

#切片数组赋值为新数组newarr
#直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组，返回是字符串，中间用“空格”分开，因此如果加上”()”，将得到切片数组，上面例子：newarr 就是一个新数据
newarr=(${arr[*]:0:3})
echo "新数组newarr为:${newarr[*]}"
#调用方法是：${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容，如果需要修改，可以看上面例子，重新定义数据。
newarr2=(${arr[*]/3/99})
echo "新数组newarr2为:${newarr2[*]}"
#获取数组的长度：获取数组长度的方法与获取字符串长度的方法相同
echo "arr数组元素:${arr[@]}"
echo "arr数组长度:${#arr[@]}"

echo '-------------------shell运算符--------------'
:<<EOF
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
shell 本身不支持简单的数学运算，可以借助命令awk或expr，expr最常用
    expr是一款表达式计算工具
EOF
#注意使用的是反引号 ` 而不是单引号 '
#条件表达式要放在方括号之间，并且要有空格，例如: [$a==$b] 是错误的，必须写成 [ $a == $b ]。
#乘号(*)前边必须加反斜杠(\)才能实现乘法运算；
#在 MAC 中 shell 的 expr 语法是：$((表达式))，此处表达式中的 "*" 不需要转义符号 "\" 。
echo '请输入你要计算的两个数'
#read num1
#read num2
#echo `expr ${num1} + ${num2} `

echo '-------------------shell函数--------------'
testDemo(){
 echo "这是我的第一个函数"
 echo "第一个参数：$1"
 echo "第二个参数：$2"
 echo "所有参数 $*"
}
echo '调用函数执行'
testDemo $1 $2

echo "当前脚本运行进程ID：$$ $!"
echo "脚本运行的最后一个进程ID号: $!"